/*
 * Copyright © 2023
 * @Author: zhangxiang
 * @Date: 2023-05-15 16:40:31
 * @LastEditors: zhangxiang
 * @LastEditTime: 2023-09-26 16:17:09
 * @Description:
 *
 */

/**
 *
 * @description: 应用类别
 * @return {*}
 *
 */
export const APP_CATEGORYS = [
  {
    label: 'AI',
    value: 'AI'
  },
  {
    label: '大数据',
    value: 'BIGDATA'
  }
]

/**
 *
 * @description: AI应用类型
 * @return {*}
 *
 */
export const APP_CATEGORY_TYPES_AI = [
  {
    label: '动态训练',
    value: '动态训练'
  },
  {
    label: '静态训练',
    value: '静态训练'
  }
]

/**
 *
 * @description: 大数据应用类型
 * @return {*}
 *
 */
export const APP_CATEGORY_TYPES_BIGDATA = [
  {
    label: '实时计算',
    value: '实时计算'
  },
  {
    label: '离线计算',
    value: '离线计算'
  }
]

/**
 *
 * @description: AI应用标签-对象及场景
 * @return {*}
 *
 */
export const APP_LABEL_OBJECTSCENE_AI = [
  '智能运维',
  '智能分析',
  '故障处理',
  '人脸识别',
  '图像识别',
  '语音识别',
  '特征识别',
  '工业质检',
  '工业生产',
  '人流预测',
  '智能视觉',
  '智能推荐',
  '智能文本处理'
]

/**
 *
 * @description: 大数据应用标签-对象及场景
 * @return {*}
 *
 */
export const APP_LABEL_OBJECTSCENE_BIGDATA = [
  '实时处理',
  '离线处理',
  '数据清洗',
  '数据去噪',
  '数据脱敏',
  '数据分析',
  '数据加密',
  '数据资产',
  '隐私计算',
  '数据挖掘',
  '用户推荐',
  '智慧交通',
  '图挖掘',
  '数据聚类',
  '异构数据源',
  '流计算',
  '图计算',
  '查询分析统计',
  '批处理',
  '结构化数据',
  '非结构化数据',
  '半结构化数据',
  '海量数据'
]

/**
 *
 * @description: AI应用标签-技术
 * @return {*}
 *
 */
export const APP_LABEL_TECHNOLOGY_AI = [
  '深度学习',
  '神经网络',
  '模型推理',
  '卷积计算',
  'Yolov5s',
  'Yolov3',
  'RetinaNet',
  'VGG-16',
  'VGG-19',
  'ResNet50',
  'MindSpore',
  'GPU加速',
  'InceptionV3',
  'Xception',
  'AIOps',
  'TensorFlow',
  'Caffe',
  'MXNet',
  'Pytorch',
  'OpenCV',
  '飞桨',
  'MCNN',
  'TNN',
  'MNN'
]

/**
 *
 * @description: 大数据应用标签-技术
 * @return {*}
 *
 */
export const APP_LABEL_TECHNOLOGY_BIGDATA = [
  'Flink',
  'Spark',
  'Storm',
  'Streams',
  'Hive',
  'Dremel',
  'Pregel',
  'Kafka',
  'Flume',
  'Giraph',
  'Hama',
  'ETL工具',
  'Hadoop',
  'Yarn',
  'HDFS',
  'MapReduce',
  'HBase',
  'NoSQL',
  'MySQL',
  'MongoDB',
  'Redis'
]

/**
 * @description: 本地备份-云商映射数据
 * @return {*}
 */
export const LOCAL_CLOUDS = [
  {
    cloudVendor: 'huaweicloud',
    cloudType: 'Huawei',
    cloudName: '华为云',
    cloudScope: 'public'
  },
  {
    cloudVendor: 'aliyun',
    cloudType: 'Aliyun',
    cloudName: '阿里云',
    cloudScope: 'public'
  },
  {
    cloudVendor: 'tencentCloud',
    cloudType: 'Tencent',
    cloudName: '腾讯云',
    cloudScope: 'public'
  },
  {
    cloudVendor: 'Wocloud',
    cloudType: 'Wocloud',
    cloudName: '联通云',
    cloudScope: 'public'
  },
  {
    cloudVendor: 'Openstack',
    cloudType: 'Openstack',
    cloudName: 'Openstack',
    cloudScope: 'private'
  },
  {
    cloudVendor: 'InspurInCloud',
    cloudType: 'InspurInCloud',
    cloudName: '浪潮云InCloud',
    cloudScope: 'private'
  }
]

/**
 *
 * @description: 获取云商item
 * @param {*} en
 * @return {*}
 *
 */
export function getCloudProviderItem(remoteCloudVendors, key) {
  const index = remoteCloudVendors.findIndex((item) => {
    return item.cloudName === key || item.cloudVendor === key || item.cloudType === key
  })
  if (index > -1) {
    return remoteCloudVendors[index]
  } else {
    // 远程云商列表中查询不到
    // 使用本地云商列表查询
    const lindex = LOCAL_CLOUDS.findIndex((item) => {
      return item.cloudName === key || item.cloudVendor === key || item.cloudType === key
    })
    if (lindex > -1) {
      return LOCAL_CLOUDS[lindex]
    }
  }
  return null
}

/**
 *
 * @description: 获取服务商中文
 * @param {*} key
 * @return {*}
 *
 */
export function getClusterProviderChn(allCloudVendors, key) {
  const item = getCloudProviderItem(allCloudVendors, key)
  return item ? item.cloudName : key
}

/**
 *
 * @description: 云商是否是私有云
 * @param {*} key
 * @return {*}
 *
 */
export function isPrivateCloud(allCloudVendors, key) {
  const item = getCloudProviderItem(allCloudVendors, key)
  return item && item.cloudScope === 'private'
}

/**
 * @description: 获取服务商图标
 * @param {*} allCloudVendors 全部云商信息 可通过 this.$store.state.app.cloudVendors 获取
 * @param {*} key
 * @param {*} type
 * @return {*}
 */
export function getCloudProviderImg(allCloudVendors, key, type = 'normal') {
  const item = getCloudProviderItem(allCloudVendors, key)
  const cloudKey = item ? item.cloudVendor : ''
  const imgKey = cloudKey + (type !== 'normal' ? ('_' + type) : '')
  let imgSrc = ''
  try {
    imgSrc = require('@/assets/imgs/hybrid-cloud/' + imgKey + '.png')
  } catch (err) {
    console.log(err)
  }
  return imgSrc
}

export const CLUSTER_AREA = [
  {
    label: '江苏',
    value: '江苏'
  },
  {
    label: '上海',
    value: '上海'
  },
  {
    label: '北京',
    value: '北京'
  }
]

/**
 * @description: GPU业务场景
 * @return {*}
 */
export const GPU_BUSINESS_SCENE = 'AI训练'

/**
 * @description: 不支持扩缩容的业务场景
 * @return {*}
 */
export const UNSCALE_BUSINESS_SCENES = [
  '前端服务器',
  '文件服务器',
  '数据库',
  'AI训练'
]

/**
 * @description: 添加调度策略 - 应用场景
 * @return {*}
 */
export const STRATEGY_BUSINESS_SCENE = [
  {
    value: 'Web应用',
    children: [
      {
        value: '前端服务器'
      }
    ]
  },
  {
    value: '数据库',
    children: [
      {
        value: '文件服务器'
      },
      {
        value: '数据库'
      }
    ]
  },
  {
    value: 'AI机器学习',
    children: [
      {
        value: 'AI训练'
      },
      {
        value: 'AI推理'
      }
    ]
  }
]

/**
 *
 * @description: 调度策略
 * @return {*}
 *
 */
export const STRATEGY_SCHEDULE_V2 = [
  {
    value: 'load',
    label: '负载感知调度策略',
    percent: 34,
    hasFactors: true,
    factors: ['cpu_usage', 'memory_usage'],
    isCheckbox: true
  },
  {
    value: 'price',
    label: '成本感知调度策略',
    percent: 33,
    hasFactors: true,
    factor: 'common',
    isCheckbox: false
  },
  {
    value: 'sla',
    label: 'SLA感知调度策略',
    percent: 33,
    hasFactors: true,
    factors: ['delay', 'loss_rate', 'bandwidth'],
    isCheckbox: true
  },
  {
    value: 'energy',
    label: '能耗感知调度策略',
    percent: 33,
    hasFactors: false
  }
]

/**
 *
 * @description: 负载策略因子
 * @return {*}
 *
 */
export const STRATEGY_LOAD_FACTORS_V2 = [
  {
    value: 'cpu_usage',
    label: 'CPU/GPU使用状况',
    hint: '节点资源CPU/GPU当前使用率',
    default: true
  },
  {
    value: 'memory_usage',
    label: '内存/显存使用状况',
    hint: '节点资源内存当前使用率',
    default: true
  },
  {
    value: 'disk_throughput',
    label: '磁盘吞吐量',
    hint: '磁盘每秒I/O读写流量'
  },
  {
    value: 'disk_iops',
    label: '磁盘IOPS',
    hint: '磁盘每秒I/O读写次数'
  }
]

/**
 *
 * @description: SLA策略因子
 * @return {*}
 *
 */
export const STRATEGY_SLA_FACTORS_V2 = [
  {
    value: 'delay',
    label: '网络延迟',
    hint: '用户端到集群网络传输延迟',
    default: true
  },
  {
    value: 'loss_rate',
    label: '网络丢包率',
    hint: '用户端到集群网络传输丢包率',
    default: true
  },
  {
    value: 'bandwidth',
    label: '网络带宽',
    hint: '用户端到集群网络带宽',
    default: true
  }
]

/**
 *
 * @description: 成本策略因子
 * @return {*}
 *
 */
export const STRATEGY_PRICE_FACTORS_V2 = [
  {
    value: 'common',
    label: '使用云商通用价格',
    hint: '从云商接口实时获取的价格'
  },
  {
    value: 'network',
    label: '考虑云资源和网络资源成本',
    hint: '从云商接口实时获取云资源和网络资源的成本'
  }
]

/**
 *
 * @description: 能耗策略因子
 * @return {*}
 *
 */
export const STRATEGY_ENERGY_FACTORS = {
  pmax: {
    name: '最大功率',
    hint: 'CPU使用率为100%对应的服务器功率'
  },
  pidle: {
    name: '空闲功率',
    hint: 'CPU使用率为0%对应的服务器功率'
  },
  cpu_usage: {
    name: 'CPU使用率',
    hint: '单位时间内CPU使用情况百分比'
  }
}

/**
 *
 * @description: 扩缩容策略-分类
 * @return {*}
 *
 */
export const STRATEGY_SCALE_TYPE = {
  vm: {
    label: '虚机扩缩容'
  },
  container: {
    label: '容器扩缩容'
  }
  // cluster: {
  //   label: '跨集群扩缩容'
  // }
}

/**
 * @description: 虚机扩缩容-扩容-默认值
 * @return {*}
 */
export const STRATEGY_SCALE_VM_MAX_DEFAULT = {
  id: '',
  groupId: '',
  type: 'max',
  resource: 'cpu', // 资源，cpu memory
  value: '70',
  duration: '5', // 监控周期（分钟）
  continuousNum: '3', // 连续出现次数
  num: '1', // 扩缩容数量
  coolTime: '900' // 冷却时间（秒）
}

/**
 * @description: 虚机扩缩容-缩容-默认值
 * @return {*}
 */
export const STRATEGY_SCALE_VM_MIN_DEFAULT = {
  id: '',
  groupId: '',
  type: 'min',
  resource: 'cpu', // 资源，cpu，memory
  value: '30',
  duration: '15', // 监控周期（分钟）
  continuousNum: '3', // 连续出现次数
  num: '1', // 扩缩容数量
  coolTime: '900' // 冷却时间（秒）
}

/**
 *
 * @description: 扩缩容策略汇总名称
 * @return {*}
 *
 */
export const STRATEGY_SCALE_NAME_ALL = {
  none: {
    label: '不配置'
  },
  history: {
    label: '基于历史数据建模分析的容器扩缩容'
  },
  hpa: {
    label: '基于自定义HPA的容器扩缩容'
  },
  cluster: {
    label: '跨集群扩缩容策略'
  },
  vm: {
    label: '虚机扩缩容策略'
  }
}

/**
 *
 * @description: 扩缩容策略
 * @return {*}
 *
 */
export const STRATEGY_SCALE = {
  none: {
    label: '无需扩缩容'
  },
  history: {
    label: '集群内-基于历史数据的动态扩缩容策略'
  },
  hpa: {
    label: '集群内-自定义动态扩缩容策略'
  },
  cluster: {
    label: '跨集群-基于业务负载的动态扩缩容策略'
  }
}

/**
 *
 * @description: 扩缩容-自定义动态扩缩容策略-详细
 * @return {*}
 *
 */
export const STRATEGY_SCALE_HPA = {
  cpu: {
    name: 'CPU利用率'
  },
  memory: {
    name: '内存利用率'
  }
}

/**
 *
 * @description: 扩缩容-基于业务负载的动态扩缩容策略-详细
 * @return {*}
 *
 */
export const STRATEGY_SCALE_CLUSTER = {
  cpu: {
    name: 'CPU利用率'
  },
  memory: {
    name: '内存利用率'
  }
}

/**
 * @description: CPU 部署-阶段-步骤总数
 * @return {*}
 */
export const DEPLOY_STAGE_STEP_NUMS = [2, 4, 7, 2]

/**
 * @description: GPU 部署-阶段-步骤总数
 * @return {*}
 */
export const DEPLOY_STAGE_STEP_NUMS_GPU = [2, 4, 9, 2]

/**
 * @description: 部署-阶段-标题
 * @return {*}
 */
export const DEPLOY_STAGE_TITLES = [
  '完成云资源开通',
  '完成安全组端口开通',
  '完成基础软件安装部署',
  '完成应用软件安装部署'
]

/**
 * @description: 部署-阶段-默认信息
 * @return {*}
 */
export const DEPLOY_STAGE_DEFAULT_INFO = {
  currentStage: 1,
  svcStatus: 1, // 1-部署中 2-部署失败 3-部署成功
  firstStages: {
    title: DEPLOY_STAGE_TITLES[0],
    stageStatus: 0, // 0-未部署 1-部署中 2-部署失败 3-部署成功
    stepTotal: 2,
    steps: []
  },
  secondStages: {
    title: DEPLOY_STAGE_TITLES[1],
    stageStatus: 0, // 0-未部署 1-部署中 2-部署失败 3-部署成功
    stepTotal: 4,
    steps: []
  },
  thirdStages: {
    title: DEPLOY_STAGE_TITLES[2],
    stageStatus: 0, // 0-未部署 1-部署中 2-部署失败 3-部署成功
    stepTotal: 7,
    steps: []
  },
  fourthStages: {
    title: DEPLOY_STAGE_TITLES[3],
    stageStatus: 0, // 0-未部署 1-部署中 2-部署失败 3-部署成功
    stepTotal: 2,
    steps: []
  }
}

/**
 *
 * @description: 告警级别
 * @return {*}
 *
 */
export const ALARM_LEVEL = [
  {
    label: '提示',
    value: '提示'
  },
  {
    label: '次要',
    value: '次要'
  },
  {
    label: '重要',
    value: '重要'
  },
  {
    label: '紧急',
    value: '紧急'
  }
]

/**
 *
 * @description: 审计操作分类
 * @return {*}
 *
 */
export const AUDIT_OPERATION_TYPE = [
  {
    label: '登录',
    value: '登录'
  },
  {
    label: '退出',
    value: '退出'
  },
  {
    label: '添加',
    value: '添加'
  },
  {
    label: '删除',
    value: '删除'
  },
  {
    label: '其他',
    value: '其他'
  }
]
